1 /* 2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021 3 License: [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License]. 4 Authors: Marcelo S. N. Mancini 5 6 Copyright Marcelo S. N. Mancini 2018 - 2021. 7 Distributed under the CC BY-4.0 License. 8 (See accompanying file LICENSE.txt or copy at 9 https://creativecommons.org/licenses/by/4.0/ 10 */ 11 /* dstep -I/path/to/ndk-r9d/platforms/android-9/arch-x86/usr/include -I/path/to/ndk-r9d/toolchains/llvm-3.4/prebuilt/linux-x86/lib/clang/3.4/include /path/to/ndk-r9d/platforms/android-9/arch-x86/usr/include/jni.h -o jni.d*/ 12 13 module hip.jni.jni; 14 15 version (Android): 16 import core.stdc.stdarg; 17 18 extern (C): 19 @system: 20 nothrow: 21 @nogc: 22 23 alias ubyte jboolean; 24 alias byte jbyte; 25 alias ushort jchar; 26 alias short jshort; 27 alias int jint; 28 alias long jlong; 29 alias float jfloat; 30 alias double jdouble; 31 alias jint jsize; 32 alias void* jobject; 33 alias jobject jclass; 34 alias jobject jstring; 35 alias jobject jarray; 36 alias jarray jobjectArray; 37 alias jarray jbooleanArray; 38 alias jarray jbyteArray; 39 alias jarray jcharArray; 40 alias jarray jshortArray; 41 alias jarray jintArray; 42 alias jarray jlongArray; 43 alias jarray jfloatArray; 44 alias jarray jdoubleArray; 45 alias jobject jthrowable; 46 alias jobject jweak; 47 alias _jfieldID* jfieldID; 48 alias _jmethodID* jmethodID; 49 alias const(JNINativeInterface)* C_JNIEnv; 50 alias const(JNINativeInterface)* JNIEnv; 51 alias const(JNIInvokeInterface)* JavaVM; 52 53 enum jobjectRefType 54 { 55 JNIInvalidRefType = 0, 56 JNILocalRefType = 1, 57 JNIGlobalRefType = 2, 58 JNIWeakGlobalRefType = 3 59 } 60 61 enum JNI_FALSE = 0; 62 enum JNI_TRUE = 1; 63 enum JNI_VERSION_1_1 = 0x00010001; 64 enum JNI_VERSION_1_2 = 0x00010002; 65 enum JNI_VERSION_1_4 = 0x00010004; 66 enum JNI_VERSION_1_6 = 0x00010006; 67 enum JNI_OK = 0; 68 enum JNI_ERR = -1; 69 enum JNI_EDETACHED = -2; 70 enum JNI_EVERSION = -3; 71 enum JNI_COMMIT = 1; 72 enum JNI_ABORT = 2; 73 74 struct JNINativeMethod 75 { 76 const(char)* name; 77 const(char)* signature; 78 void* fnPtr; 79 } 80 81 struct JNINativeInterface 82 { 83 void* reserved0; 84 void* reserved1; 85 void* reserved2; 86 void* reserved3; 87 jint function(JNIEnv*) GetVersion; 88 jclass function(JNIEnv*, const(char)*, jobject, const(jbyte)*, jsize) DefineClass; 89 jclass function(JNIEnv*, const(char)*) FindClass; 90 jmethodID function(JNIEnv*, jobject) FromReflectedMethod; 91 jfieldID function(JNIEnv*, jobject) FromReflectedField; 92 jobject function(JNIEnv*, jclass, jmethodID, jboolean) ToReflectedMethod; 93 jclass function(JNIEnv*, jclass) GetSuperclass; 94 jboolean function(JNIEnv*, jclass, jclass) IsAssignableFrom; 95 jobject function(JNIEnv*, jclass, jfieldID, jboolean) ToReflectedField; 96 jint function(JNIEnv*, jthrowable) Throw; 97 jint function(JNIEnv*, jclass, const(char)*) ThrowNew; 98 jthrowable function(JNIEnv*) ExceptionOccurred; 99 void function(JNIEnv*) ExceptionDescribe; 100 void function(JNIEnv*) ExceptionClear; 101 void function(JNIEnv*, const(char)*) FatalError; 102 jint function(JNIEnv*, jint) PushLocalFrame; 103 jobject function(JNIEnv*, jobject) PopLocalFrame; 104 jobject function(JNIEnv*, jobject) NewGlobalRef; 105 void function(JNIEnv*, jobject) DeleteGlobalRef; 106 void function(JNIEnv*, jobject) DeleteLocalRef; 107 jboolean function(JNIEnv*, jobject, jobject) IsSameObject; 108 jobject function(JNIEnv*, jobject) NewLocalRef; 109 jint function(JNIEnv*, jint) EnsureLocalCapacity; 110 jobject function(JNIEnv*, jclass) AllocObject; 111 jobject function(JNIEnv*, jclass, jmethodID, ...) NewObject; 112 jobject function(JNIEnv*, jclass, jmethodID, va_list) NewObjectV; 113 jobject function(JNIEnv*, jclass, jmethodID, jvalue*) NewObjectA; 114 jclass function(JNIEnv*, jobject) GetObjectClass; 115 jboolean function(JNIEnv*, jobject, jclass) IsInstanceOf; 116 jmethodID function(JNIEnv*, jclass, const(char)*, const(char)*) GetMethodID; 117 jobject function(JNIEnv*, jobject, jmethodID, ...) CallObjectMethod; 118 jobject function(JNIEnv*, jobject, jmethodID, va_list) CallObjectMethodV; 119 jobject function(JNIEnv*, jobject, jmethodID, jvalue*) CallObjectMethodA; 120 jboolean function(JNIEnv*, jobject, jmethodID, ...) CallBooleanMethod; 121 jboolean function(JNIEnv*, jobject, jmethodID, va_list) CallBooleanMethodV; 122 jboolean function(JNIEnv*, jobject, jmethodID, jvalue*) CallBooleanMethodA; 123 jbyte function(JNIEnv*, jobject, jmethodID, ...) CallByteMethod; 124 jbyte function(JNIEnv*, jobject, jmethodID, va_list) CallByteMethodV; 125 jbyte function(JNIEnv*, jobject, jmethodID, jvalue*) CallByteMethodA; 126 jchar function(JNIEnv*, jobject, jmethodID, ...) CallCharMethod; 127 jchar function(JNIEnv*, jobject, jmethodID, va_list) CallCharMethodV; 128 jchar function(JNIEnv*, jobject, jmethodID, jvalue*) CallCharMethodA; 129 jshort function(JNIEnv*, jobject, jmethodID, ...) CallShortMethod; 130 jshort function(JNIEnv*, jobject, jmethodID, va_list) CallShortMethodV; 131 jshort function(JNIEnv*, jobject, jmethodID, jvalue*) CallShortMethodA; 132 jint function(JNIEnv*, jobject, jmethodID, ...) CallIntMethod; 133 jint function(JNIEnv*, jobject, jmethodID, va_list) CallIntMethodV; 134 jint function(JNIEnv*, jobject, jmethodID, jvalue*) CallIntMethodA; 135 jlong function(JNIEnv*, jobject, jmethodID, ...) CallLongMethod; 136 jlong function(JNIEnv*, jobject, jmethodID, va_list) CallLongMethodV; 137 jlong function(JNIEnv*, jobject, jmethodID, jvalue*) CallLongMethodA; 138 jfloat function(JNIEnv*, jobject, jmethodID, ...) CallFloatMethod; 139 jfloat function(JNIEnv*, jobject, jmethodID, va_list) CallFloatMethodV; 140 jfloat function(JNIEnv*, jobject, jmethodID, jvalue*) CallFloatMethodA; 141 jdouble function(JNIEnv*, jobject, jmethodID, ...) CallDoubleMethod; 142 jdouble function(JNIEnv*, jobject, jmethodID, va_list) CallDoubleMethodV; 143 jdouble function(JNIEnv*, jobject, jmethodID, jvalue*) CallDoubleMethodA; 144 void function(JNIEnv*, jobject, jmethodID, ...) CallVoidMethod; 145 void function(JNIEnv*, jobject, jmethodID, va_list) CallVoidMethodV; 146 void function(JNIEnv*, jobject, jmethodID, jvalue*) CallVoidMethodA; 147 jobject function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualObjectMethod; 148 jobject function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualObjectMethodV; 149 jobject function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualObjectMethodA; 150 jboolean function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualBooleanMethod; 151 jboolean function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualBooleanMethodV; 152 jboolean function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualBooleanMethodA; 153 jbyte function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualByteMethod; 154 jbyte function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualByteMethodV; 155 jbyte function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualByteMethodA; 156 jchar function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualCharMethod; 157 jchar function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualCharMethodV; 158 jchar function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualCharMethodA; 159 jshort function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualShortMethod; 160 jshort function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualShortMethodV; 161 jshort function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualShortMethodA; 162 jint function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualIntMethod; 163 jint function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualIntMethodV; 164 jint function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualIntMethodA; 165 jlong function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualLongMethod; 166 jlong function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualLongMethodV; 167 jlong function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualLongMethodA; 168 jfloat function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualFloatMethod; 169 jfloat function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualFloatMethodV; 170 jfloat function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualFloatMethodA; 171 jdouble function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualDoubleMethod; 172 jdouble function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualDoubleMethodV; 173 jdouble function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualDoubleMethodA; 174 void function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualVoidMethod; 175 void function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualVoidMethodV; 176 void function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualVoidMethodA; 177 jfieldID function(JNIEnv*, jclass, const(char)*, const(char)*) GetFieldID; 178 jobject function(JNIEnv*, jobject, jfieldID) GetObjectField; 179 jboolean function(JNIEnv*, jobject, jfieldID) GetBooleanField; 180 jbyte function(JNIEnv*, jobject, jfieldID) GetByteField; 181 jchar function(JNIEnv*, jobject, jfieldID) GetCharField; 182 jshort function(JNIEnv*, jobject, jfieldID) GetShortField; 183 jint function(JNIEnv*, jobject, jfieldID) GetIntField; 184 jlong function(JNIEnv*, jobject, jfieldID) GetLongField; 185 jfloat function(JNIEnv*, jobject, jfieldID) GetFloatField; 186 jdouble function(JNIEnv*, jobject, jfieldID) GetDoubleField; 187 void function(JNIEnv*, jobject, jfieldID, jobject) SetObjectField; 188 void function(JNIEnv*, jobject, jfieldID, jboolean) SetBooleanField; 189 void function(JNIEnv*, jobject, jfieldID, jbyte) SetByteField; 190 void function(JNIEnv*, jobject, jfieldID, jchar) SetCharField; 191 void function(JNIEnv*, jobject, jfieldID, jshort) SetShortField; 192 void function(JNIEnv*, jobject, jfieldID, jint) SetIntField; 193 void function(JNIEnv*, jobject, jfieldID, jlong) SetLongField; 194 void function(JNIEnv*, jobject, jfieldID, jfloat) SetFloatField; 195 void function(JNIEnv*, jobject, jfieldID, jdouble) SetDoubleField; 196 jmethodID function(JNIEnv*, jclass, const(char)*, const(char)*) GetStaticMethodID; 197 jobject function(JNIEnv*, jclass, jmethodID, ...) CallStaticObjectMethod; 198 jobject function(JNIEnv*, jclass, jmethodID, va_list) CallStaticObjectMethodV; 199 jobject function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticObjectMethodA; 200 jboolean function(JNIEnv*, jclass, jmethodID, ...) CallStaticBooleanMethod; 201 jboolean function(JNIEnv*, jclass, jmethodID, va_list) CallStaticBooleanMethodV; 202 jboolean function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticBooleanMethodA; 203 jbyte function(JNIEnv*, jclass, jmethodID, ...) CallStaticByteMethod; 204 jbyte function(JNIEnv*, jclass, jmethodID, va_list) CallStaticByteMethodV; 205 jbyte function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticByteMethodA; 206 jchar function(JNIEnv*, jclass, jmethodID, ...) CallStaticCharMethod; 207 jchar function(JNIEnv*, jclass, jmethodID, va_list) CallStaticCharMethodV; 208 jchar function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticCharMethodA; 209 jshort function(JNIEnv*, jclass, jmethodID, ...) CallStaticShortMethod; 210 jshort function(JNIEnv*, jclass, jmethodID, va_list) CallStaticShortMethodV; 211 jshort function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticShortMethodA; 212 jint function(JNIEnv*, jclass, jmethodID, ...) CallStaticIntMethod; 213 jint function(JNIEnv*, jclass, jmethodID, va_list) CallStaticIntMethodV; 214 jint function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticIntMethodA; 215 jlong function(JNIEnv*, jclass, jmethodID, ...) CallStaticLongMethod; 216 jlong function(JNIEnv*, jclass, jmethodID, va_list) CallStaticLongMethodV; 217 jlong function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticLongMethodA; 218 jfloat function(JNIEnv*, jclass, jmethodID, ...) CallStaticFloatMethod; 219 jfloat function(JNIEnv*, jclass, jmethodID, va_list) CallStaticFloatMethodV; 220 jfloat function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticFloatMethodA; 221 jdouble function(JNIEnv*, jclass, jmethodID, ...) CallStaticDoubleMethod; 222 jdouble function(JNIEnv*, jclass, jmethodID, va_list) CallStaticDoubleMethodV; 223 jdouble function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticDoubleMethodA; 224 void function(JNIEnv*, jclass, jmethodID, ...) CallStaticVoidMethod; 225 void function(JNIEnv*, jclass, jmethodID, va_list) CallStaticVoidMethodV; 226 void function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticVoidMethodA; 227 jfieldID function(JNIEnv*, jclass, const(char)*, const(char)*) GetStaticFieldID; 228 jobject function(JNIEnv*, jclass, jfieldID) GetStaticObjectField; 229 jboolean function(JNIEnv*, jclass, jfieldID) GetStaticBooleanField; 230 jbyte function(JNIEnv*, jclass, jfieldID) GetStaticByteField; 231 jchar function(JNIEnv*, jclass, jfieldID) GetStaticCharField; 232 jshort function(JNIEnv*, jclass, jfieldID) GetStaticShortField; 233 jint function(JNIEnv*, jclass, jfieldID) GetStaticIntField; 234 jlong function(JNIEnv*, jclass, jfieldID) GetStaticLongField; 235 jfloat function(JNIEnv*, jclass, jfieldID) GetStaticFloatField; 236 jdouble function(JNIEnv*, jclass, jfieldID) GetStaticDoubleField; 237 void function(JNIEnv*, jclass, jfieldID, jobject) SetStaticObjectField; 238 void function(JNIEnv*, jclass, jfieldID, jboolean) SetStaticBooleanField; 239 void function(JNIEnv*, jclass, jfieldID, jbyte) SetStaticByteField; 240 void function(JNIEnv*, jclass, jfieldID, jchar) SetStaticCharField; 241 void function(JNIEnv*, jclass, jfieldID, jshort) SetStaticShortField; 242 void function(JNIEnv*, jclass, jfieldID, jint) SetStaticIntField; 243 void function(JNIEnv*, jclass, jfieldID, jlong) SetStaticLongField; 244 void function(JNIEnv*, jclass, jfieldID, jfloat) SetStaticFloatField; 245 void function(JNIEnv*, jclass, jfieldID, jdouble) SetStaticDoubleField; 246 jstring function(JNIEnv*, const(jchar)*, jsize) NewString; 247 jsize function(JNIEnv*, jstring) GetStringLength; 248 const(jchar)* function(JNIEnv*, jstring, jboolean*) GetStringChars; 249 void function(JNIEnv*, jstring, const(jchar)*) ReleaseStringChars; 250 jstring function(JNIEnv*, const(char)*) NewStringUTF; 251 jsize function(JNIEnv*, jstring) GetStringUTFLength; 252 const(char)* function(JNIEnv*, jstring, jboolean*) GetStringUTFChars; 253 void function(JNIEnv*, jstring, const(char)*) ReleaseStringUTFChars; 254 jsize function(JNIEnv*, jarray) GetArrayLength; 255 jobjectArray function(JNIEnv*, jsize, jclass, jobject) NewObjectArray; 256 jobject function(JNIEnv*, jobjectArray, jsize) GetObjectArrayElement; 257 void function(JNIEnv*, jobjectArray, jsize, jobject) SetObjectArrayElement; 258 jbooleanArray function(JNIEnv*, jsize) NewBooleanArray; 259 jbyteArray function(JNIEnv*, jsize) NewByteArray; 260 jcharArray function(JNIEnv*, jsize) NewCharArray; 261 jshortArray function(JNIEnv*, jsize) NewShortArray; 262 jintArray function(JNIEnv*, jsize) NewIntArray; 263 jlongArray function(JNIEnv*, jsize) NewLongArray; 264 jfloatArray function(JNIEnv*, jsize) NewFloatArray; 265 jdoubleArray function(JNIEnv*, jsize) NewDoubleArray; 266 jboolean* function(JNIEnv*, jbooleanArray, jboolean*) GetBooleanArrayElements; 267 jbyte* function(JNIEnv*, jbyteArray, jboolean*) GetByteArrayElements; 268 jchar* function(JNIEnv*, jcharArray, jboolean*) GetCharArrayElements; 269 jshort* function(JNIEnv*, jshortArray, jboolean*) GetShortArrayElements; 270 jint* function(JNIEnv*, jintArray, jboolean*) GetIntArrayElements; 271 jlong* function(JNIEnv*, jlongArray, jboolean*) GetLongArrayElements; 272 jfloat* function(JNIEnv*, jfloatArray, jboolean*) GetFloatArrayElements; 273 jdouble* function(JNIEnv*, jdoubleArray, jboolean*) GetDoubleArrayElements; 274 void function(JNIEnv*, jbooleanArray, jboolean*, jint) ReleaseBooleanArrayElements; 275 void function(JNIEnv*, jbyteArray, jbyte*, jint) ReleaseByteArrayElements; 276 void function(JNIEnv*, jcharArray, jchar*, jint) ReleaseCharArrayElements; 277 void function(JNIEnv*, jshortArray, jshort*, jint) ReleaseShortArrayElements; 278 void function(JNIEnv*, jintArray, jint*, jint) ReleaseIntArrayElements; 279 void function(JNIEnv*, jlongArray, jlong*, jint) ReleaseLongArrayElements; 280 void function(JNIEnv*, jfloatArray, jfloat*, jint) ReleaseFloatArrayElements; 281 void function(JNIEnv*, jdoubleArray, jdouble*, jint) ReleaseDoubleArrayElements; 282 void function(JNIEnv*, jbooleanArray, jsize, jsize, jboolean*) GetBooleanArrayRegion; 283 void function(JNIEnv*, jbyteArray, jsize, jsize, jbyte*) GetByteArrayRegion; 284 void function(JNIEnv*, jcharArray, jsize, jsize, jchar*) GetCharArrayRegion; 285 void function(JNIEnv*, jshortArray, jsize, jsize, jshort*) GetShortArrayRegion; 286 void function(JNIEnv*, jintArray, jsize, jsize, jint*) GetIntArrayRegion; 287 void function(JNIEnv*, jlongArray, jsize, jsize, jlong*) GetLongArrayRegion; 288 void function(JNIEnv*, jfloatArray, jsize, jsize, jfloat*) GetFloatArrayRegion; 289 void function(JNIEnv*, jdoubleArray, jsize, jsize, jdouble*) GetDoubleArrayRegion; 290 void function(JNIEnv*, jbooleanArray, jsize, jsize, const(jboolean)*) SetBooleanArrayRegion; 291 void function(JNIEnv*, jbyteArray, jsize, jsize, const(jbyte)*) SetByteArrayRegion; 292 void function(JNIEnv*, jcharArray, jsize, jsize, const(jchar)*) SetCharArrayRegion; 293 void function(JNIEnv*, jshortArray, jsize, jsize, const(jshort)*) SetShortArrayRegion; 294 void function(JNIEnv*, jintArray, jsize, jsize, const(jint)*) SetIntArrayRegion; 295 void function(JNIEnv*, jlongArray, jsize, jsize, const(jlong)*) SetLongArrayRegion; 296 void function(JNIEnv*, jfloatArray, jsize, jsize, const(jfloat)*) SetFloatArrayRegion; 297 void function(JNIEnv*, jdoubleArray, jsize, jsize, const(jdouble)*) SetDoubleArrayRegion; 298 jint function(JNIEnv*, jclass, const(JNINativeMethod)*, jint) RegisterNatives; 299 jint function(JNIEnv*, jclass) UnregisterNatives; 300 jint function(JNIEnv*, jobject) MonitorEnter; 301 jint function(JNIEnv*, jobject) MonitorExit; 302 jint function(JNIEnv*, JavaVM**) GetJavaVM; 303 void function(JNIEnv*, jstring, jsize, jsize, jchar*) GetStringRegion; 304 void function(JNIEnv*, jstring, jsize, jsize, char*) GetStringUTFRegion; 305 void* function(JNIEnv*, jarray, jboolean*) GetPrimitiveArrayCritical; 306 void function(JNIEnv*, jarray, void*, jint) ReleasePrimitiveArrayCritical; 307 const(jchar)* function(JNIEnv*, jstring, jboolean*) GetStringCritical; 308 void function(JNIEnv*, jstring, const(jchar)*) ReleaseStringCritical; 309 jweak function(JNIEnv*, jobject) NewWeakGlobalRef; 310 void function(JNIEnv*, jweak) DeleteWeakGlobalRef; 311 jboolean function(JNIEnv*) ExceptionCheck; 312 jobject function(JNIEnv*, void*, jlong) NewDirectByteBuffer; 313 void* function(JNIEnv*, jobject) GetDirectBufferAddress; 314 jlong function(JNIEnv*, jobject) GetDirectBufferCapacity; 315 jobjectRefType function(JNIEnv*, jobject) GetObjectRefType; 316 } 317 318 struct _JNIEnv 319 { 320 const(JNINativeInterface)* functions; 321 } 322 323 struct JNIInvokeInterface 324 { 325 void* reserved0; 326 void* reserved1; 327 void* reserved2; 328 jint function(JavaVM*) DestroyJavaVM; 329 jint function(JavaVM*, JNIEnv**, void*) AttachCurrentThread; 330 jint function(JavaVM*) DetachCurrentThread; 331 jint function(JavaVM*, void**, jint) GetEnv; 332 jint function(JavaVM*, JNIEnv**, void*) AttachCurrentThreadAsDaemon; 333 } 334 335 struct _JavaVM 336 { 337 const(JNIInvokeInterface)* functions; 338 } 339 340 struct JavaVMAttachArgs 341 { 342 jint version_; 343 const(char)* name; 344 jobject group; 345 } 346 347 struct JavaVMOption 348 { 349 const(char)* optionString; 350 void* extraInfo; 351 } 352 353 struct JavaVMInitArgs 354 { 355 jint version_; 356 jint nOptions; 357 JavaVMOption* options; 358 jboolean ignoreUnrecognized; 359 } 360 361 struct _jfieldID; 362 struct _jmethodID; 363 364 union jvalue 365 { 366 jboolean z; 367 jbyte b; 368 jchar c; 369 jshort s; 370 jint i; 371 jlong j; 372 jfloat f; 373 jdouble d; 374 jobject l; 375 } 376 377 jint JNI_OnLoad(JavaVM* vm, void* reserved); 378 void JNI_OnUnload(JavaVM* vm, void* reserved);